package pe.edu.upc.e41a.javasoft.jsf;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.roo.addon.jsf.managedbean.RooJsfManagedBean;
import org.springframework.roo.addon.serializable.RooSerializable;

import pe.edu.upc.e41a.javasoft.domain.Publicacion;
import pe.edu.upc.e41a.javasoft.domain.Transaccion;
import pe.edu.upc.e41a.javasoft.domain.Usuario;
import pe.edu.upc.e41a.javasoft.service.MisPublicacionesService;

@Configurable
@ManagedBean(name = "misTransaccionesBean")
//@RequestScoped
@SessionScoped
@RooSerializable
@RooJsfManagedBean(entity = Transaccion.class, beanName = "misTransaccionesBean")
public class MisTransaccionesBean implements Serializable {
	

	private static final long serialVersionUID = 1L;
	
	@Autowired
    MisPublicacionesService misPublicacionesService;	
	
	//Transacciones
	private String titleCompras = "Mis compras";
	private String titleVentas = "Mis ventas";
	private List<Transaccion> transacciones; //compras
	private List<String> columns;
	
	//Mis publicaciones
	private String titleAvisosActivos = "Mis avisos activos";
	private String titleAvisosCaducados = "Mis avisos caducados";
	private String titleAvisosVendidos = "Mis avisos vendidos";
	private List<Publicacion> publicacionesActivas; 
	private List<Publicacion> publicacionesCaducadas; 
	private List<Publicacion> publicacionesVendidas; 
	
	private List<String> columnsPublications;	
	

	private boolean dataVisible = false;
	private Publicacion publicacion;

	private Usuario usuarioSession;
	
	@PostConstruct
    public void init() {
        columns = new ArrayList<String>();
        //columns.add("publicacion.titulo");
        columns.add("cantidad");
        columns.add("comentario");
        columns.add("fechaRegistro");
        
        columnsPublications = new ArrayList<String>();
        //columns.add("publicacion.titulo");
        columnsPublications.add("titulo");
        columnsPublications.add("descripcion");
        columnsPublications.add("tipo");
        columnsPublications.add("cantidad");
        columnsPublications.add("precio");      
        
        fijarUsuarioSession();
    }

	public Usuario getUsuarioSession() {
		return usuarioSession;
	}

	public void setUsuarioSession(Usuario usuarioSession) {
		this.usuarioSession = usuarioSession;
	}

	public Publicacion getPublicacion() {
        if (publicacion == null) {
            publicacion = new Publicacion();
        }
        return publicacion;
    }

	public void setPublicacion(Publicacion publicacion) {
        this.publicacion = publicacion;
    }
	
	public String getTitleCompras() {
		return titleCompras;
	}

	public void setTitleCompras(String titleCompras) {
		this.titleCompras = titleCompras;
	}
	
	public String getTitleVentas() {
		return titleVentas;
	}

	public void setTitleVentas(String titleVentas) {
		this.titleVentas = titleVentas;
	}		
	
	public String getTitleAvisosActivos() {
		return titleAvisosActivos;
	}

	public void setTitleAvisosActivos(String titleAvisosActivos) {
		this.titleAvisosActivos = titleAvisosActivos;
	}	
	
	public String getTitleAvisosCaducados() {
		return titleAvisosCaducados;
	}

	public void setTitleAvisosCaducados(String titleAvisosCaducados) {
		this.titleAvisosCaducados = titleAvisosCaducados;
	}	
	
	public String getTitleAvisosVendidos() {
		return titleAvisosVendidos;
	}

	public void setTitleAvisosVendidos(String titleAvisosVendidos) {
		this.titleAvisosVendidos = titleAvisosVendidos;
	}		

	public List<String> getColumns() {
		return columns;
	}
	
	public List<String> getColumnsPublications(){
		return columnsPublications;
	}
	
	public List<Transaccion> getTransacciones() {
		return transacciones;
	}

	public void setTransacciones(List<Transaccion> transacciones) {
		this.transacciones = transacciones;
	}	
	
	public List<Publicacion> getPublicacionesActivas() {
		return publicacionesActivas;
	}

	public void setPublicacionesActivas(List<Publicacion> publicacionesActivas) {
		this.publicacionesActivas = publicacionesActivas;
	}	
	
	public List<Publicacion> getPublicacionesCaducadas() {
		return publicacionesCaducadas;
	}

	public void setPublicacionesCaducadas(List<Publicacion> publicacionesCaducadas) {
		this.publicacionesCaducadas = publicacionesCaducadas;
	}		
	
	public List<Publicacion> getPublicacionesVendidas() {
		return publicacionesVendidas;
	}

	public void setPublicacionesVendidas(List<Publicacion> publicacionesVendidas) {
		this.publicacionesVendidas = publicacionesVendidas;
	}		
	
	public String buscarComprasPorUsuario(){
		transacciones = misPublicacionesService.buscarComprasPorUsuario(getUsuarioSession().getCodigo());
		dataVisible = !transacciones.isEmpty();
        return null;		
	}
	
	public String buscarVentasPorUsuario(){
		transacciones = misPublicacionesService.buscarVentasPorUsuario(getUsuarioSession().getCodigo());
		dataVisible = !transacciones.isEmpty();
        return null;		
	}
	
	public String buscarPublicacionPorUsuarioPorEstado(){
		int usuarioId = getUsuarioSession().getCodigo();
		publicacionesActivas = misPublicacionesService.listarPublicacionPorUsuarioPorEstado(usuarioId, Publicacion.ESTADO_ACTIVO);
		publicacionesCaducadas = misPublicacionesService.listarPublicacionPorUsuarioPorEstado(usuarioId, Publicacion.ESTADO_CADUCADO);
		publicacionesVendidas = misPublicacionesService.listarPublicacionPorUsuarioPorEstado(usuarioId, Publicacion.ESTADO_VENDIDO);
		return null;
	}
	
	public String displayList() {
		buscarComprasPorUsuario();
		return "misCompras";
    }
	
	public String displayListCompras() {
		buscarComprasPorUsuario();
		return "misCompras";
    }	
	
	public String displayListVentas() {
		buscarVentasPorUsuario();
		return "misVentas";
    }		
	
	public String displayListPublicaciones(){
		buscarPublicacionPorUsuarioPorEstado();
		return "misPublicaciones";
	}
	
	public boolean isDataVisible() {
		return dataVisible;
	}

	public void setDataVisible(boolean dataVisible) {
		this.dataVisible = dataVisible;
	}	
	 
	 public void fijarUsuarioSession(){
			FacesContext context = FacesContext.getCurrentInstance();
			HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
			usuarioSession = ((Usuario)session.getAttribute("usuarioSession"));
		}	 	 
}
